/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.proyectos.model;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Transient;

/**
 *
 * @author Jose
 */
@Entity

@NamedQueries({
    @NamedQuery(name = "Proyectos.findAll", query = "SELECT p FROM Proyectos p where p.ncarrera = :ncarrera "),
    @NamedQuery(name = "Proyectos.findByNcodigo", query = "SELECT p FROM Proyectos p WHERE p.ncodigo = :ncodigo"),
    @NamedQuery(name = "Proyectos.findByCreferencia", query = "SELECT p FROM Proyectos p WHERE upper(p.creferencia) = :creferencia and p.ncarrera = :ncarrera "),
    @NamedQuery(name = "Proyectos.findByName", query = "SELECT p FROM Proyectos p WHERE upper(p.cnombre) like :cnombre and p.ncarrera = :ncarrera")})
public class Proyectos implements Serializable, Comparable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column
    private BigDecimal ncodigo;

    @Column
    private String cnombre;

    @Column
    private String cdescripcion;

    @Column
    private String creferencia;

    @Transient
    private int nvaloracion;

    public int getNvaloracion() {
        return nvaloracion;
    }

    public void setNvaloracion(int nvaloracion) {
        this.nvaloracion = nvaloracion;
    }

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "nproyecto", orphanRemoval = true)
    private List<HitosProyecto> vhitos;
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "nproyecto", orphanRemoval = true)
    private List<PreguntasProyectos> vpreguntas;

    public List<PreguntasProyectos> getVpreguntas() {
        if (vpreguntas == null) {
            this.vpreguntas = new ArrayList<PreguntasProyectos>();
        }
        return vpreguntas;
    }

    public void setVpreguntas(List<PreguntasProyectos> vpreguntas) {
        this.vpreguntas = vpreguntas;
    }

    public Carreras getNcarrera() {
        return ncarrera;
    }

    public void setNcarrera(Carreras ncarrera) {
        this.ncarrera = ncarrera;
    }

    public List<HitosProyecto> getVhitos() {
        if (this.vhitos == null) {
            this.vhitos = new ArrayList<HitosProyecto>();
        }
        return vhitos;
    }

    public void setVhitos(List<HitosProyecto> vhitos) {
        this.vhitos = vhitos;
    }

    public String getCreferencia() {
        return creferencia;
    }

    public void setCreferencia(String creferencia) {
        this.creferencia = creferencia;
    }


    @ManyToOne
    @JoinColumn(name = "ncarrera")
    private Carreras ncarrera;

    public Proyectos() {
    }

    public BigDecimal getNcodigo() {
        return ncodigo;
    }

    public void setNcodigo(BigDecimal ncodigo) {
        this.ncodigo = ncodigo;
    }

    public String getCnombre() {
        return cnombre;
    }

    public void setCnombre(String cnombre) {
        this.cnombre = cnombre;
    }

    public String getCdescripcion() {
        return cdescripcion;
    }

    public void setCdescripcion(String cdescripcion) {
        this.cdescripcion = cdescripcion;
    }

    public void valorar(List<PreguntasProyectos> ventrada) {
        this.nvaloracion = 0;
        for (PreguntasProyectos ppr : ventrada) {
            ppr.setNproyecto(this);
            int l = this.getVpreguntas().indexOf(ppr);
            if (l < 0) {
               nvaloracion += 10;     
            } else {
                PreguntasProyectos prepro = this.getVpreguntas().get(l);
                int dif = Math.abs(ppr.getNpuntuacion().intValue() - prepro.getNpuntuacion().intValue());
                nvaloracion += dif;
            }
        }

    }


    @Override
    public int compareTo(Object o) {
        Proyectos pr = (Proyectos) o;
        if (this.nvaloracion == pr.nvaloracion) {
            return 0;
        } else if (this.nvaloracion > pr.nvaloracion) {
            return 1;
        } else {
            return -1;
        }
    }
}
